export default {
  // 为当前模块开启命名空间
  namespaced: true,

  // 模块的 state 数据
  state: () => ({
    // 购物车的数组，用来存储购物车中每个商品的信息对象
    // 每个商品的信息对象，都包含如下 6 个属性：
    // { goods_id, goods_name, goods_price, goods_count, goods_small_logo, goods_state }
    cart: JSON.parse(uni.getStorageSync('cart') || '[]')
  }),

  // 模块的 mutations 方法
  mutations: {
    // 加购物车的方法，改变cart数组
    addCart(state, goodsObj) {
      const findResult = state.cart.find(item => item.goods_id === goodsObj.goods_id)
      if (findResult) {
        // 购物车中已经有这个商品了，把这商品的数量+1
        findResult.goods_count++
      } else {
        // 购物车中还没有这个商品，我们要去把他加到购物车
        state.cart.push(goodsObj)
      }
      // 数据持久化
      this.commit('m_cart/saveCartStorage')
    },
    saveCartStorage(state) {
      // 数据持久化
      uni.setStorageSync('cart', JSON.stringify(state.cart))
    },
    updateGoodsState(state, goods) { // goods：{goods_id: 38, goods_state: false}
      // 更改cart数组中某一个商品的radio状态值
      const findResult = state.cart.find(item => item.goods_id === goods.goods_id)
      if (findResult) {
        findResult.goods_state = goods.goods_state
        // 数据持久化：
        this.commit('m_cart/saveCartStorage')
      }
    },
    updateGoodsCount(state, goods) { //goods:{goods_id: 38, goods_count: 5}
      // 更改cart数组中某一个商品的购买数量
      const findResult = state.cart.find(item => item.goods_id === goods.goods_id)
      if (findResult) {
        findResult.goods_count = goods.goods_count
        // 数据持久化：
        this.commit('m_cart/saveCartStorage')
      }
    },
    deleteGoods(state, id) {
      // 删除某个商品
      state.cart = state.cart.filter(item => item.goods_id !== id)
      // 数据持久化
      this.commit('m_cart/saveCartStorage')
    },
    updateAllGoodsState(state, newState) {
      // 把cart数组中的所有商品的状态全部改为一个新的状态
      state.cart.forEach(item => item.goods_state = newState)
      // 数据持久化
      this.commit('m_cart/saveCartStorage')
    }

  },

  // 模块的 getters 属性
  getters: {
    // 购物车中数量总和
    total(state) {
      let num = 0
      state.cart.forEach((item) => num += item.goods_count)
      return num
    },
    // 已经勾选商品的数量
    checkedCount(state) {
      // 先过滤出已经勾选的商品（filter）
      // 累加已经勾选的商品的数量（reduce）
      return state.cart.filter(item => item.goods_state).reduce((total, goods) => total += goods.goods_count, 0)
    },
    checkedAmount(state) {
      // 动态计算商品总价格
      return state.cart.filter(item => item.goods_state).reduce((total, goods) => total += goods.goods_count * goods
        .goods_price, 0).toFixed(2)
    }
  },
}
